local opt = { noremap = true, silent = true }

-- 键位映射安全检查、映射
local function safe_keymap(mode, lhs, rhs, opts)
    opts = opts or {}
    local ok, err = pcall(vim.keymap.set, mode, lhs, rhs, opts)
    if not ok then
        vim.notify(string.format("键位映射 %s 失败: %s", lhs, err), vim.log.levels.WARN)
    end
    return ok
end

safe_keymap("n", "<C-J>", "<C-W><C-J>", opt)
safe_keymap("n", "<C-k>", "<C-W><C-k>", opt)
safe_keymap("n", "<C-l>", "<C-W><C-l>", opt)
safe_keymap("n", "<C-h>", "<C-W><C-h>", opt)
safe_keymap("n", "<Leader>wsv", "<C-W>v", opt)
safe_keymap("n", "<Leader>wsh", "<C-W>s", opt)

safe_keymap("n", "j", [[v:count > 0 ? "m'" . v:count . "j" : 'gj']], { noremap = true, expr = true })
safe_keymap("n", "k", [[v:count > 0 ? "m'" . v:count . "k" : 'gk']], { noremap = true, expr = true })

safe_keymap("v", "<C-y>", '"+y', opt)

safe_keymap("n", "<Leader>xw", function()
    vim.wo.wrap = not vim.wo.wrap
    vim.wo.linebreak = vim.wo.wrap -- 自动同步 linebreak
    vim.notify("自动换行: " .. (vim.wo.wrap and "开" or "关"), vim.log.levels.INFO)
end, { desc = "切换自动换行" })

-------------寄存器粘贴板
safe_keymap("n", "<Leader>p1", '"1p<esc>', vim.tbl_deep_extend("force", opt, { desc = "粘贴寄存器1的内容" }))
safe_keymap("n", "<Leader>p2", '"2p<esc>', vim.tbl_deep_extend("force", opt, { desc = "粘贴寄存器2的内容" }))
safe_keymap("n", "<Leader>p3", '"3p<esc>', vim.tbl_deep_extend("force", opt, { desc = "粘贴寄存器3的内容" }))
safe_keymap("n", "<Leader>p4", '"4p<esc>', vim.tbl_deep_extend("force", opt, { desc = "粘贴寄存器4的内容" }))

safe_keymap("n", "<Leader>pp1", '"1y', vim.tbl_deep_extend("force", opt, { desc = "复制内容到存器1" }))
safe_keymap("n", "<Leader>pp2", '"2y', vim.tbl_deep_extend("force", opt, { desc = "复制内容到存器2" }))
safe_keymap("n", "<Leader>pp3", '"3y', vim.tbl_deep_extend("force", opt, { desc = "复制内容到存器3" }))
safe_keymap("n", "<Leader>pp4", '"4y', vim.tbl_deep_extend("force", opt, { desc = "复制内容到存器4" }))

-------------上移、下移
-- 上移当前行（Alt + k）
safe_keymap("n", "<A-k>", ":m .-2<CR>==", { noremap = true, silent = true })
-- 下移当前行（Alt + j）
safe_keymap("n", "<A-j>", ":m .+1<CR>==", { noremap = true, silent = true })

-- Visual 模式下也支持（选中多行移动）
safe_keymap("v", "<A-k>", ":m '<-2<CR>gv=gv", { noremap = true, silent = true })
safe_keymap("v", "<A-j>", ":m '>+1<CR>gv=gv", { noremap = true, silent = true })
